Материалы

Загрузка и обзор данных

Выгрузим данные о банке "Метанпромбанк" из csv-файла в датафрейм и сохраним его в переменной bank.

Выведем 10 строчек датафрейма bank на экран.

Таблица содержит следующую информацию:

Выведем основную информацию о датафрейме.

Таблица с исходными данными содержит 12 столбцов и 10000 строк. Обратим внимание, что в столбцах age и balance имеются пропущенные значения.

В исходных данных нет отрицательных значений. Обратим внимание на аномально-минимальные и максимальные значения столбцов balance и EST_SALARY, а также на минимальное значение столбца products.

Построим общую гистограмму для всех числовых столбцов таблицы.

Предобработка данных

Замена названия столбцов

Приведем названия столбцов к нижнему регистру.

Теперь переименуем столбец userid на user_id.

Обработка дубликатов

Проверим наши данные на наличие дубликатов.

В исходных данных не строк-дубликатов.

Обратим внимание на столбец user_id - идентификатор пользователя. Проверим, все ли идентификаторы пользователей являются уникальными.

В наших данных есть 73 клиента с повторяющимся идентификатором пользователя. Посмотрим на данные этих клиентов.

Обратим внимание на столбец churn, все клиенты с повторяющимся идентификатором пользователя не являются отточными. Поскольку нас интересует информация в разрезе оттока, если мы удалим клиентов с повторяющимся идентификатором пользователя (количество таких клиентов 0,73% от исходного датафрема), это не повлияет на наше дальнейшее исследование. Удалим строки-дубликаты в столбце user_id.

В исходных данных нет клиентов с повторяющимся идентификатором пользователя.

Кодирование столбцов (пол, город)

Изучим значения столбцов gender и city.

Значения этих столбцов относятся к категориальным неупорядоченным данным. Для того, чтобы применять среднее и смотреть корреляции числовых показателей со столбцами gender и city, необходимо их закодировать. В качестве кодировщика используем тип кодирования - One-Hot Encoder.

Аналогичным образом закодируем столбец city.

Заменим названия закодированных столбцов.

Удаление пропусков

Выведем количество пропущенных значений для каждого столбца.

В столбце age 4 пропущенных значений, так как их очень мало удаление этих строк не повлияет на наше дальнейшее исследование. Удалим строки с пропусками в столбце age.

В столбце balance большое количество пропущенных значений - 2260 значений, поэтому нам необходимо их исследовать и постараться установить их тип, чтобы понять, можем ли мы заполнить пропуски, и если можем, то понять, как лучше это сделать. Для этого сравним типичного клиента без пропущенных значений в столбце balance и с пропущенными значениями.

Средние значения типичного клиента без пропусков в переменной without_missing_values не сильно отличаются от клиента в переменной with_missing_values. У пользователей с пропусками, мы видим более низкие значения столбцов equity - количество баллов собственности и products - количество продуктов, а значения столбца est_salary - заработная плата клиента - выше. Посмотрим на значение корреляции между срезами данных without_missing_values и with_missing_values.

Исходя из полученных данных о коэффициентах корреляции с пропусками, мы можем предположить, что пропуски в столбце balance могут быть случайными (MAR) и не иметь явной связи с другими столбцами. Это может быть вызвано ошибками ввода данных или техническими проблемами при сборе информации. Также значения корреляции с пропусками могут указывать на наличие других скрытых факторов или влияние других переменных, которых нет в данных (MNAR). Так как мы не имеем доступа к информации о том, как собирались данные, мы не можем точно определить к какой категории относятся наши пропуски. Если мы отбросим строки с пропусками, то потеряем большое количество данных, которые нам понадобятся для дальнейшего анализа, а если попытаемся их заполнить синтетическими данными, то это может исказить результаты нашего исследования. Оставим пропущенные значения в столбце balance без изменений.

Обработка аномальных значений

Посмотрим на столбцы с числовыми данными - balance и est_salary.

Изучим данные столбца balance - баланс на счёте.

Значения баланса около 0 рублей являются аномально маленькими. А значения около 10,000,000 рублей практически слились с нулем и являются редкими.

Построим график "ящик с усами" для столбца balance, чтобы посмотреть будут ли отнесены значения близкие к 0 к выбросам:

Значения, близкие к 0 не являются выбросными.

Изучим данные столбца est_salary - заработная плата клиента.

Значения дохода клиентов более 1,200,000 рублей практически слились с нулем и являются редкими.

Изучим данные столбца products - количество продуктов, которыми пользуется клиент.

Обратим внимание на клиента с количеством продуктов 0. Скорее всего здесь возникла ошибка, так как, если человек является клиентом банка, значит он пользуется его продуктом. Удалим строку с количеством продуктов 0.

Узнаем, какое количество строк мы удалили из исходного датасета.

Изменение типов данных

Изучим, к какому типу данных относятся наши столбцы.

Столбец age - возраст, приведем к целочисленным значениям.

Исследовательский анализ данных

Изучим портреты отточных и неотточных клиентов. Для удобства сравнения портретов пользователей, определим типичного отточного и типичного неотточного клиента, используя средние значения для каждой категории.

Сравним портреты пользователей, для этого рассчитаем процентные отличия между значениями признаков отточных и неотточных клиентов, иными словами, узнаем насколько процентов значение признака у отточных клиентов больше по сравнению с неотточными.

При сравнении пользователей, мы определили, какие характеристики значительно влияют на отток:

Изучим корреляции для наших характеристик, особое внимание уделим наличию корреляций с характеристикой оттока. Для обнаружения нелинейных зависимостей будем использовать коэффициент корреляции Phik -𝜙k. Рассчитаем матрицу корреляций Phik.

С помощью матрицы корреляции Фика мы обнаружили зависимости между целевой характеристикой churn и такими параметрами как:

Для обнаружения линейных зависимостей посчитаем коэффициент корреляции Пирсона.

Выделим все значения коэффициента корреляции с нашей целевой характеристикой - churn.

Мы нашли следующие зависимости между параметрами и целевой характеристикой churn:

Обратим внимание, что в отличии от коэффициента Пирсона, коэффициент корреляции Phik обнаружил зависимость между оттоком и возрастом клиента.

Исследование уровня оттока клиентов

Узнаем общий уровень оттока клиентов нашего банка.

Общий уровень оттока клиентов банка "Метанпромбанк" составляет 18%.

Исследование вероятности оттока в каждой категории

Исследуем портреты клиентов, которые склонны уходить из нашего банка. Для этого узнаем уровень оттока для каждой категории.

Пол

Узнаем уровень оттока для категории gender - пол клиента.

Уровень оттока среди мужчин почти в два раза выше, чем у женщин и составляет - 23.72%, у женщин - 12.82%. Обратим внимание, что общее количество мужчин и женщин среди клиентов банка практически одинаковое - 4940 мужчин и 4944 женщин.

Возраст

Узнаем уровень оттока для категории age - пол клиента. Для нашего удобства создадим функцию category_churn, которая на вход будет принимать наш датафрейм - dataframe и столбец по которому мы хотим сделать группировку - column.

Глядя на график, мы можем выделить две группы клиентов, чей уровень оттока превысил средний уровень оттока по банку:

Первая группа: клиенты в возрасте от 25 до 35 лет;

Вторая группа: клиенты в возрасте от 50 до 60 лет.

Несмотря на большой уровень оттока клиентов в возрасте 21 года - 26.67%, их общее количество мало - всего 15 человек.

Город

Изучим уровень оттока клиентов категории city - город.

Уровень оттока в Ярославле и Ростове практически одинаковый - 19.01% и 18.66% соответственно, немного превысив средний уровень оттока по банку. Вероятность оттока в Рыбинске немного меньше - 16.44%. Обратим внимание, что самое большое количество клиентов находится в Ярославле - 5817 человек, а самое мальнькое в Ростове - 1415 человек.

Баллы кредитного скоринга

Исследуем в разрезе оттока баллы кредитного скоринга.

Глядя на график, мы можем выделить клиентов кредитного скоригна от 820 до 909 баллов, которые больше подвержены оттоку.

Количество баллов собственности

Узнаем вероятность оттока в зависимости от категории equity - количество баллов собственности.

Глядя на график, мы можем сделать следующий вывод: чем больше баллов собственности у клиента, тем выше вероятность оттока. Обратим внимание, что количество клиентов у которых баллов собственности от 6 до 9 сравнительно мало от 13 до 161 человека, по сравнению с клиентами от 0 до 5 баллов - от 771 до 1895 человек. Клиенты от 3 до 9 баллов собственности, превысили средний уровень оттока по банку.

Баланс на счёте клиента

Исследуем в разрезе оттока balance - баланс на счёте клиента.

Среди отточных клиентов, мы наблюдаем большее количество клиентов с балансом от 1.125 млн. рублей до 4.075 млн. рублей.

В дальнейшем необходимо будет провести дополнительное исследование, которое покажет есть ли значимая разница между балансами отточных и неотточных клиентов.

Количество продуктов, которыми пользуется клиент

Исследуем вероятность оттока категории products - количество продуктов, которыми пользуется клиент.

Глядя на график, мы можем сделать следующий вывод: чем больше количество продуктов, которыми пользуется клиент, тем выше вероятность оттока. Также отметим, что самое большое количество клиентов пользуются двумя продуктами банка - 5074 человек, всего 19 человек пользуются пятью продуктами. Клиенты с количеством от 2 продуктов превысили средний уровень оттока по банку.

Активность клиентов за последнее время

Исследуем как активность клиентов влияет на уровень оттока.

Вероятность оттока клиентов, которые были активны почти в два раза выше - 24.48%, чем у "неактиных" клиентов - 11.46%. Общее количество "активных" клиентов немного выше, чем "неактивных" - 5171 и 4713 соответственно.

Наличие кредитной карты

Изучим, как наличие кредитной карты влияет на уровень оттока клиентов.

Вероятность оттока клиентов у которых нет кредитной карты выше - 25.61%, чем у клиентов с кредитной картой - 14.83%. Отметим, что общее количество клиентов с кредитной картой практически в два раза больше, чем клиентов без неё.

Заработная плата клиентов

Исследуем в разрезе оттока заработную плату клиентов.

Среди отточных клиентов немного больше людей с зарплатой:

В дальнейшем необходимо будет провести дополнительное исследование, которое покажет есть ли значимая разница между заработнами платами отточных и неотточных клиентов.

Проверка гипотез

Средняя заработная плата отточных и неооточных клиентов одинаковая

Для проверки этой гипотезы сформулируем нулевую и альтернативную гипотезу, а также зададим пороговое значение alpha.

H_0: Средняя заработная плата (est_salary) отточных клиентов (churn = 1) = средняя заработная плата (est_salary) неотточных клиентов (churn = 0)

H_a: Средняя заработная плата (est_salary) отточных клиентов (churn = 1) ≠ редняя заработная плата (est_salary) неотточных клиентов (churn = 0)

alpha = 0.05

Для проверки этой гипотезы мы будем использовать t-критерий Стьюдента и u-критерий Манна-Уитни.

Сначала проверим гипотезу t-критерием Стьюдента методом - scipy.stats.ttest_ind (array1, array2, equal_var), так как нам необходимо проверить средние двух выборок. Прежде чем применить этот метод, нам необходимо проверить три аспекта, чтобы понять, можно ли применять t-тест:

  1. Генеральные совокупности не должны зависеть друг от друга;
  2. Выборочные средние должны быть нормально распределены;
  3. Дисперсии рассматриваемых генеральных совокупностей должны быть равны.

Первое условие выполняется - генеральные совокупности не зависят друг от друга.

Проверим второе условие - выборочные средние должны быть нормально распределены.

Нам необходимо знать размер выборки, чем больше размер выборки, тем более вероятно, что выборочные средние будут приближаться к нормальному распределению. Это объясняется центральной предельной теоремой (ЦПТ). При достаточно большом размере выборки (при N ≥ 30) распределение выборочных средних будет приближаться к нормальному распределению, даже если исходное распределение не является нормальным.

Проверим третье условие - дисперсии рассматриваемых генеральных совокупностей должны быть равны. Нам известно, что если выборки разного размера и/или можно предположить, что дисперсии у генеральных совокупностей разные, необходимо указать параметр equal_var= False. Этот параметр будет учитывать различия в дисперсиях между выборками. Наши выборки сильно отличаются по размеру (размер выборки "отточных" клиентов - 1806, "неотточных" - 8078), и мы предполагаем, что дисперсии у совокупностей разные.

При проверке гипотезы с помощью t-критерия Стьюдента мы выяснили, что средние заработные платы отточных и неотточных клиентов статистически значимо не различаются.

Теперь проверим гипотезу с помощью u-критерия Манна-Уитни - методом st.mannwhitneyu(array1, array2, alternative), так как мы выяснили, что наши выборки распределены не нормально.

Тест имеет параметр alternative, по-умолчанию, он принимает значение None для совместимости, но в таком случае тест выполняет проверку похожую на одностороннюю, что не совсем корректно для нашего теста. Более корректные результаты можно получить, используя alternative="two-sided".

При проверке гипотезы с помощью u-критерия Манна-Уитни мы выяснили, что средние заработные платы отточных и неотточных клиентов статистически значимо различаются.

При проверке гипотезы разными методами, мы получили разные результаты:

Причины, по которым мы получили разные результаты, проверяя гипотезу t-тестом и u-тестом:

1) t-тест является параметрическим, т.е. по выборке оценивает параметры предполагаемого распределения - среднее значение. u-тест является непараметрческим, т.е. работает с рангами, — номерами значений в упорядоченном ряду, — никак не учитывая сами значения. t-тест и u-тест имеют различные распределения и свойства, что может приводить к различным результатам;

2) Результаты тестов могут зависеть от размеры выборки. Тест Стьюдента предполагает нормальное распределение данных и хорошо работает для выборок большого размера, как в нашем случае. Тест Манна-Уитни может использоваться для сравнения средних значений, когда данные не удовлетворяют предположению о нормальности или для выборок малого размера.

При изучении распределения значений заработной платы на этапе исследовательского анализа, мы увидели похожую плотность распределения значений для отточных и неотточных клиентов. В данном случае, когда размеры выборок составляют 1806 и 8078, тест Стьюдента будет более мощным и точным.

Вывод: нулевую гипотезу отвергнуть не удалось, средние заработные платы отточных и неотточных клиентов статистически значимо не различаются.

Средний баланс на счёте отточных и неооточных клиентов одинаковый

Сформулируем нулевую и альтернативную гипотезу, зададим пороговое значение alpha.

H_0: Средний баланс на счёте (balance) отточных клиентов (churn = 1) = средний баланс на счёте (balance) неотточных клиентов (churn = 0)

H_a: Средний баланс на счёте (balance) отточных клиентов (churn = 1) ≠ средний баланс на счёте (balance) неотточных клиентов (churn = 0)

alpha = 0.05

Проверим выборки на нормальность с помощью критерия Шапиро-Уилка.

Выборки array_churn_balance и array_not_churn_balance распределены нормально.

В случае неотточных тест указывает, что при количестве значений более 5000 он может не давать верный результат.

Так как значения баланса распределены ассиметрично, то мы не можем считать их распределение нормальным. Также нам известно, что в столбце баланса присутствует большое количество выбросов, поэтому проверять гипотезу мы будем с помощью теста Манна-Уитни:

Вывод: нулевую гипотезу подтвердить не удалось, средние балансы на счёте отточных и неотточных клиентов статистически значимо различаются.

Определение стратегических показателей, которые влияют на отток клиентов

На основе проведённого анализа, мы выяснили, какие показатели в значительной степени влияют на отток клиентов:

  1. gender - пол клиента, именно клиенты-мужчины склонны уходить из нашего банка;
  2. age - возраст, клиенты в возрасте от 25 - 35 лет и от 50 - 60 лет;
  3. score - баллы кредитного скоринга, клиенты, у которых от 820 до 909 баллов;
  4. equity - количество баллов собственности, клиенты, у которых от 3 до 9 баллов;
  5. balance - баланс на счёте клиента, клиенты с балансом от 1.125 млн. до 4.075 млн. рублей;
  6. products - количество продуктов, которыми пользуется клиент, клиенты с количеством от 2 продуктов и выше;
  7. last_act - клиенты, которые были активны за последнее время;
  8. credit_card - клиенты, у которых нет кредитных карт;

Сегментация на основе стратегических показателей

На основе стратегических показателей нам необходимо найти сегменты клиентов, которые склонны уходить из нашего банка. Каждый сегмент должен удовлетворять нескольким условиям:

Найдем первый сегмент, используя следующие стратегические показатели:

Мы определили 8 стратегических показателей. Нам необходимо сделать срез данных, в паре по каждому параметру, и посмотреть какие пары параметров удовлетворяют условиям, предъявляемому к сегменту. Для этого создадим список queries_list, куда запишем все стратегические показатели. Затем создадим цикл, который будет последовательно брать пару параметров, и проверять удовлетворяет ли полученный срез данных условиям, которые предъявляются к сегменту. Сегменты, которые будут удовляетворять условиям запишем в переменную segments.

Приоритизация сегментов

Всего мы обнаружили 21 сегмент. Среди них мы выделим три сегмента с самым большим количеством отточных клиентов: 1) Сегмент_№1 - last_activity == 1 , credit_card == 0, количество отточных клиентов 607 человек;

2) Сегмент_№2 - balance >= 1125000 and balance <= 4075000 , products >= 2, количество отточных клиентов 585 человек;

3) Сегмент_№3 - age >= 25 and age <= 35 , products >= 2, количество отточных клиентов 575 человек;

Cегмент_№1

Узнаем осоновную информацию о клиентах, которые попали в первый сегмент. Для этого сохраним первый сегмент в переменную segment_1_last_activity_credit_card.

Клиенты в первом сегменте были активны в последнее время и у них нет кредитной карты. Посмотрим на типичного клиента в первом сегменте.

Обратим внимание, что у типичного клиента в первом сегменте достаточно высокие баллы кредитного скоринга - 856, это клиенты среднего возраста - 45 лет, у них небольшое количество баллов собственности - 3 балла, достаточно большой баланс на счёте - 902698.48 рублей, они пользуются двумя продуктами и у них достаточно высокая заработная плата - 137362.24 рублей.

Рекомендации

На основе данных о клиентах в первом сегменте, дадим рекомендации, которые помогут вернуть клиентов в банк или удержать сомневающихся от оттока.

Рекомендации для Сегмента_№1:

Сегмент_№2

Изучим второй сегмент, сохраним информацию о втором сегменте в переменой segment_2_balance_products.

Все клиенты во втором сегменте имеют высокий баланс на счёте - от 1,125 млн. рублей - 4,075 млн. рублей, они пользуются двумя и более продуктами. Посмотрим на типичного пользователя во втором сегменте.

У типичного клиента во втором сегменте достаточно высокие баллы кредитного скоринга - 878, это клиенты среднего возраста - 46 лет, количество баллов собственности - 4 балла, и у них достаточно высокая заработная плата - 167224.84 рублей. Около половины пользователей проявляли свою активность за последнее время, а также чуть менее половины имеют кредитные карты.

Рекомендации

На основе данных о клиентах во втором сегменте, дадим соответствующие рекомендации.

Рекомендации для Сегмента_№2:

Сегмент_№3

Узнаем больше информации о клиентах в третьем сегменте, сохраним данные в переменой segment_3_age_25_35_products.

Все клиенты в третьем сегменте - это молодые люди в возрасте от 25 до 35 лет, они пользуются двумя и более продуктами. Посмотрим на типичного пользователя.

У типичного клиента в третьем сегменте достаточно средние баллы кредитного скоринга - 850, количество баллов собственности - 3 балла, высокий баланс на счёте - 652800.20 рублей, заработная плата - 113469.33 рублей, около половины пользователей проявляли свою активность за последнее время, а также более половины клиентов имеют кредитные карты.

Рекомендации

На основе данных о клиентах в третьем сегменте, дадим рекомендации, которые помогут вернуть клиентов в банк или удержать сомневающихся от оттока.

Рекомендации для Сегмента_№3:

Презентация

Дашборд

Общий вывод

На этапе предобработки данных мы проделали следующую работу:

  1. Все названия столбцов привели к нижнему регистру, заменили название столбца userid на user_id.
  2. Удалили явные дубликаты в столбце user_id - идентификатор пользователя.
  3. Закодировали копии столбцов gender - пол и city - город, получили новые столбцы: female, male, Rostov, Rybinsk и Yaroslavl.
  4. Удалили строки с пропусками в столбце age - возраст, пропуски в столбце balance - баланс на счёте, оставили без изменений.
  5. Обработали аномальные значения в столбцах balance - баланс на счёте, est_salary - заработная плата клиента и products - количество продуктов, которыми пользуется клиент.
  6. Заменили вещественный тип данных в столбце age - возраст, на целочисленный.

Провели исследовательский анализ данных:

  1. equity - количество баллов собственности - у отточных клиентов на 58.0% больше, чем у неотточных;
  2. balance - баланс на счёте - у отточных клиентов на 53.1% больше, чем у неотточных;
  3. last_activity - активный клиент - у отточных активных клиентов на 45.8% больше, чем у неотточных;
  4. male - пол клиента, среди оточных клиентов-мужчин на 38.3% больше, чем у неотточных;
  5. products - количество продуктов, которыми пользуется клиент - у отточных клиентов на 35.2% больше, чем у неотточных.
  1. male и female - пол клиента - 0.22;
  2. last_activity - активность клиента - 0.26;
  3. credit_card - наличие кредитной карты - 0.20;
  4. products - количество продуктов, которыми пользуется клиент - 0.26;
  5. balance - баланс на счёте - 0.29;
  6. equity - количество баллов собственности - 0.35;
  7. age - возраст - 0.18;
  8. score - баллы кредитного скоринга - 0.23.
  1. male - корреляция 14% - положительная слабая корреляционная связь: чем больше уровень оттока клиентов, тем больше среди них клиентов-мужчин;
  2. female - корреляция -14% - отрицательная слабая корреляционная связь: чем больше уровень оттока клиентов, тем меньше среди них клиентов-женщин.
  3. last_activity - корреляция 17% - положительная слабая корреляционная связь: чем больше уровень оттока клиентов, тем большую активность проявлял клиент;
  4. credit_card - корреляция -13% - отрицательная слабая корреляционная связь: чем больше уровень оттока клиентов, тем меньше среди них клиентов с кредитной картой;
  5. products - корреляция 30% - положительная умеренная корреляционная связь: чем больше уровень оттока клиентов, тем больше продуктов использует клиент;
  6. balance - корреляция 19% - положительная слабая корреляционная связь: чем больше уровень оттока клиентов, тем больше баланс на счёте;
  7. churn - equity - корреляция 27% - положительная слабая корреляционная связь: чем больше уровень оттока клиентов, тем больше количество баллов собственности;
  8. score - корреляция 10% - положительная слабая корреляционная связь: чем больше уровень оттока клиентов, тем выше баллы кредитного скоринга;

Категория gender - пол:

Категория age - возраст:

Категория city - город:

Категория score - баллы кредитного скоринга:

Категория equity - количество баллов собственности:

Категория balance - баланс на счёте клиента:

Категория products - количество продуктов, которыми пользуется клиент:

Категория last_activity - активность клиентов за последнее время:

Категория credit_card - наличие кредитной карты:

Категория est_salary - заработная плата клиентов:

Провели проверку гипотез и установили, что:

  1. Средние заработные платы отточных и неотточных клиентов статистически значимо не различаются.
  2. Средние балансы на счёте отточных и неотточных клиентов статистически значимо различаются.

Определили стратегические показатели, которые влияют на отток клиентов:

  1. gender - пол клиента, именно клиенты-мужчины склонны уходить из нашего банка;
  2. age - возраст, клиенты в возрасте от 25 - 35 лет и от 50 - 60 лет;
  3. score - баллы кредитного скоринга, клиенты, у которых от 820 до 909 баллов;
  4. equity - количество баллов собственности, клиенты, у которых от 3 до 9 баллов;
  5. balance - баланс на счёте клиента, клиенты с балансом от 1.125 млн. до 4.075 млн. рублей;
  6. products - количество продуктов, которыми пользуется клиент, клиенты с количеством от 2 продуктов и выше;
  7. last_act - клиенты, которые были активны за последнее время;
  8. credit_card - клиенты, у которых нет кредитных карт.

Провели сегментацию на основе стратегических показателей, выделели три сегмента с самым большим количеством отточных пользователей:

  1. Сегмент_№1

Рекомендации для отдела маркетинга по удержанию клиентов в сегменте_№1:

  1. Сегмент_№2

Рекомендации для отдела маркетинга по удержанию клиентов в сегменте_№2:

  1. Сегмент_№3

Рекомендации для отдела маркетинга по удержанию клиентов в сегменте_№3: